package com.hoshiicloud.user.service.company;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hoshiicloud.common.exception.ServiceException;
import com.hoshiicloud.user.entity.company.Company;
import com.hoshiicloud.user.param.company.CompanyAddParam;

import java.util.List;

/**
 * <p>
 * 公司 服务类
 * </p>
 *
 * @author WGJ
 * @since 2019-04-22
 */
public interface ICompanyService extends IService<Company> {

    IPage<Company> getPage(IPage<Company> page, QueryWrapper<Company> queryWrapper, String key);

    /**
     * 根据id获取
     *
     * @param id ID
     * @return Company
     */
    Company getById(Long id);

    /**
     * 根据一组id获取
     *
     * @param ids id组
     * @return List<Company>
     */
    List<Company> getByIds(List<Long> ids);

    /**
     * 保存
     *
     * @param entity 实体对象
     * @return Long
     */
    Long insert(Company entity) throws ServiceException;

    /**
     * 修改
     *
     * @param entity 实体对象
     * @return Long
     */
    Long update(Company entity) throws ServiceException;

    /**
     * 查询
     *
     * @param entity 查询参数实体
     * @return IPage<Company>
     */
    IPage<Company> List(Company entity);

    /**
     * 删除（逻辑删除）
     *
     * @param id ID
     * @return boolean
     * @throws ServiceException
     */
    boolean delete(Long id) throws ServiceException;

    /**
     * 删除（物理删除）
     *
     * @param id ID
     * @return boolean
     * @throws ServiceException
     */
    boolean realDelete(Long id) throws ServiceException;


    /**
     * 根据名称查询租户信息
     *
     * @param companyName
     * @return List<Company>
     */

    List<Company> companyList(String companyName);

    /**
     * 新增租户和管理员信息
     *
     * @param param
     * @return
     */
    boolean addCompanyAndDepart(CompanyAddParam param);

    long saveCompany(Company entity);

    /**
     * 租户注册
     *
     * @param param
     * @return
     */
    boolean companyRegister(CompanyAddParam param);
}
